// package com.alibaba.druid.sql.ast.statement;

// import com.alibaba.druid.sql.ast.SQLObjectImpl;
#pragma once

#include "../SQLObjectImpl.h"

#include "SQLSelectQuery.h"

class SQLSelectQueryBase : virtual public SQLObjectImpl, virtual public SQLSelectQuery
{
public:
  BOOL_ptr parenthesized;

  BOOL_ptr isParenthesized()
  {
    return parenthesized;
  }

  void setParenthesized(BOOL_ptr parenthesized)
  {
    this->parenthesized = parenthesized;
  }

  // SQLSelectQuery* clone() {return nullptr;};
  virtual SQLObject_ptr clone()
  {
    SQLObject_ptr clone_tmp = std::shared_ptr<SQLSelectQueryBase>(new SQLSelectQueryBase());
    std::shared_ptr<SQLSelectQueryBase> clone_res = std::dynamic_pointer_cast<SQLSelectQueryBase>(clone_tmp);

    return clone_res;
  }
  virtual void accept0(SQLASTVisitor_ptr visitor) {};
};
